package main

import "fmt"

/*
基本介绍
go仍然有面向对象编程的继承，封装和多态的特性
只是实现的方式和其他OOP语言不一样
*/
/*
如何理解抽象
定义一个结构体的时候，实际上就是把一类事物的共有的属性(字段)和行为(方法)提取出来
形成一个物理模型(模板)。这种研究问题的方法称为抽象
*/
//定义一个结构体Account
type Account struct {
	AccountNo string
	Pwd       string
	Balance   float64
}

//方法
//存款
func (account *Account) Deposite(money float64, pwd string) {
	//看下输入的密码是否正确
	if pwd != account.Pwd {
		fmt.Println("你输入的密码不正确")
		return
	}
	//看看存款金额是否正确
	if money <= 0 {
		fmt.Println("输入金额不正确")
		return
	}
	account.Balance += money
	fmt.Println("存款成功~~~")
}

//取款
func (account *Account) WithDraw(money float64, pwd string) {
	//看下输入的密码是否正确
	if pwd != account.Pwd {
		fmt.Println("输入的密码不正确")
		return
	}
	//看看取款金额是否正确
	if money <= 0 || money > account.Balance {
		fmt.Println("输入的金额不正确")
		return
	}
	account.Balance -= money
	fmt.Println("取款成功~~~")
}

//查询余额
func (account *Account) Query(pwd string) {
	//看下输入的密码是否正确
	if pwd != account.Pwd {
		fmt.Println("输入的密码不正确")
		return
	}
	fmt.Printf("你的账号为=%v 余额=%v\n", account.AccountNo, account.Balance)
}
func main() {
	account := Account{
		AccountNo: "gs111",
		Pwd:       "666",
		Balance:   100.0,
	}
	account.Query("666")
}
